﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using vudu.Logica.Clases;
using vudu.EnlaceDatos.SqlServer;
using System.Collections;

namespace vudu.PaginasWeb.G6Pensum
{
  
    public partial class CrearPensum : System.Web.UI.Page
    {
        // inicialice una lista de lista del tipo Materias
        Pensum NuevoPensum = new Pensum();
        // instanciamos un objeto del tipo de la interfaz CrearPensumElegir
        CrearPensumElegir crearSiguiente = new CrearPensumElegir();
        // instanciamos un objeto del tipo Materia
        Materia materia = new Materia();
        // colocamos una lista Estatica para que mantenga la lista del tipo materia
        public static List<Materia> _misMaterias = new List<Materia>();  
        System.Web.UI.WebControls.CheckBox CheckBoxAgregarMateria = new CheckBox();
        

        protected void Page_Load(object sender, EventArgs e)
        {
           // le asigamos al string miRol lo recibido en el session["rol"]
           string miRol = (string)Session["rol"];
           // validamos que la variable session["rol"] sea efectivamente el usuario actual de la pagina
            if (miRol != "Escuela")
                Response.Redirect("../G3AccesoSistema/InicioSistema.aspx");
            Escuela esc = (Escuela)Session["Usuario"];
            nombreEscuela.Text ="Escuela: "+ esc.NombreEscuela;
            // Validacion para cuando entre a la primera vez a la pagina
            if (!Page.IsPostBack)
            {
                // la primera vez que entre a la pagina, inicializamos la lista del tipo Mateis
                _misMaterias = new List<Materia>();
            }
            // Validamos para que cada vez que se haga "Click" en un Checbox no refresque toda la pagina
            if (!CheckBoxAgregarMateria.AutoPostBack)
            {
               // llenamos la tabla en donde se muestra las materias 
                LlenarTablaMaterias();          
            }
            else
            {
                // inicializamos la lista de materias
                _misMaterias = new List<Materia>();
            }
            
        }

        // Este metodo inserta en la lista _misMaterias, a las Materias que se hagan "Check"
        public void insertarFilaMateria(String nombreMateria, int IDMateria)
        {
            materia = new Materia();
            materia.Nombre = nombreMateria;
            materia.Codigo = IDMateria;
            // si la lista no tiene null insertamos el objeto del tipo Materia a la lista
            if (_misMaterias != null)
                _misMaterias.Add(materia);
            else
            {
                // si la lista no esta inicializada la inicializo y agregamos ese objeto a la lista
                _misMaterias = new List<Materia>();
                _misMaterias.Add(materia);
            }
                   
        }


        // metodo del evento de cada Checkbox
        public void AccionCheckBoxElegirMateria(Object sender, EventArgs e)
        {
            //Convertimos el objeto enviado en boton, para poder obtener su id.
            CheckBox clickedCheckBox = (CheckBox)sender;
            
            // Verifica si el Checkbox fue chequeado
            if (clickedCheckBox.Checked)
                insertarFilaMateria(clickedCheckBox.Text, Convert.ToInt32(clickedCheckBox.ID));
            else
            {   
                // en el caso que no haya sido chequeado, borramos de la lista de materias, el que ya habia sido
                // chequeado anteriormente
                if (!clickedCheckBox.Checked)
                    for (int indice = 0; indice < _misMaterias.Count; indice++)
                    {
                        if (Convert.ToInt32(clickedCheckBox.ID) == _misMaterias[indice].Codigo)
                            _misMaterias.RemoveAt(indice);
                    }
            }
           
        }
    
        // Este Metodo llena la tabla con las materias a Escoger por el Usuario
        public void LlenarTablaMaterias()
        {
            int contadorMaximoFilas = 0;
            TableRow Filas = new TableRow();
            TablaMaterias.Rows.Add(Filas);
            //Recorremos la lista de materias
            foreach (Materia ListaMateria in NuevoPensum.ConsultarListaMateria())
            {
                if (contadorMaximoFilas == 7)
                {
                    Filas = new TableRow();
                    TablaMaterias.Rows.Add(Filas);
                    contadorMaximoFilas = 0;
                }
                //Creamos un Objeto del tipo TableCell
                TableCell celda = new TableCell();
                Filas.Cells.Add(celda);
                // Instacionamos un objeto del tipo Label
                System.Web.UI.WebControls.Label labelRegistro = new Label();
                labelRegistro.Text = ListaMateria.Nombre;
                // Instanciamos un objeto del tipo Checkbox
                CheckBoxAgregarMateria = new CheckBox();
                CheckBoxAgregarMateria.CssClass = "Check";            
                CheckBoxAgregarMateria.ID = Convert.ToString(ListaMateria.Codigo);
                CheckBoxAgregarMateria.Text = labelRegistro.Text;
                // le asigamos a cada Checkbox un evento para controlar cuando fue Cliqueado
                CheckBoxAgregarMateria.CheckedChanged += new EventHandler(AccionCheckBoxElegirMateria);
                CheckBoxAgregarMateria.AutoPostBack = true;
                contadorMaximoFilas++;
                celda.Controls.Add(CheckBoxAgregarMateria);
            }
              
        }
        
       // Este metodo ejecuta el evento del Boton Aceptar, para redireccionar a la otra pagina
        public void BotonSeleccionar(object sender, EventArgs e)
        {
            if (_misMaterias.Count != 0)
            {
                // le pasamos a la variable session la lista con las materias seleccionadas
                Session["MateriaAgregada"] = _misMaterias;
                // Inicializamos la lista de materias escogidas para que borre las anteriores
                _misMaterias = null;
                // redireccionamos a la siguiente pagina
                Response.Redirect("../G6Pensum/CrearPensumElegir.aspx");
            }
            else
            {
                // si la lista de materias esta vacia, mostramos el mensaje de error
                if (_misMaterias.Count == 0)
                {
                    mensaje.Text = "* Debe seleccionar aunque sea una materia de la lista";

                }
            }
                  
        }
       
    }
}